import CryptoJS from 'crypto-js'

// ！！！重要：这些常量值必须与后端协商保持一致！！！
// 从环境变量获取密钥和IV（需在 .env 文件中配置 VITE_AES_KEY 和 VITE_AES_IV）
const KEY = CryptoJS.enc.Utf8.parse(import.meta.env.VITE_AES_KEY)
const IV = CryptoJS.enc.Utf8.parse(import.meta.env.VITE_AES_IV)

// AES加密 (返回Base64编码的字符串)
export const encryptAES = (plainText) => {
  try {
    const encrypted = CryptoJS.AES.encrypt(
      CryptoJS.enc.Utf8.parse(plainText), // 将明文转为WordArray
      KEY,
      {
        iv: IV,
        mode: CryptoJS.mode.CBC, // 加密模式，与后端一致（例如CBC或ECB）
        padding: CryptoJS.pad.Pkcs7 // 填充方式，前端Pkcs7对应后端PKCS5Padding
      }
    )
    return encrypted.toString() // 返回Base64格式的密文
  } catch (error) {
    console.error('加密失败:', error)
    throw new Error('加密失败')
  }
}

// AES解密
export const decryptAES = (cipherText) => {
  try {
    const decryptParams = {
      iv: IV,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    }
    const decryptedBytes = CryptoJS.AES.decrypt(
      cipherText, // 传入Base64格式的密文
      KEY,
      decryptParams
    )
    // 将解密后的WordArray转为UTF-8字符串
    return decryptedBytes.toString(CryptoJS.enc.Utf8)
  } catch (error) {
    console.error('解密失败:', error)
    throw new Error('解密失败')
  }
}
